package com.delay.queue.delayedqueue.redisson;

//import org.redisson.api.RBlockingQueue;
//import org.redisson.api.RDelayedQueue;
//import org.redisson.api.RedissonClient;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.util.concurrent.TimeUnit;

/**
 * @author gxing
 * @desc 延时队列管理
 * @date 2021/3/12
 */
//@Component
//public class RedisDelayedQueueManager {

//    @Autowired
//    RedissonClient redissonClient;

    /**
     * 添加元素到延时队列
     *
     * @param t         队列成员
     * @param delay     延时时间
     * @param timeUnit  时间单位
     * @param queueName 队列名称
     * @param <T>       泛型
     */
//    public <T> void add(T t, long delay, TimeUnit timeUnit, String queueName) {
//        RBlockingQueue<T> blockingFairQueue = redissonClient.getBlockingQueue(queueName);
//        RDelayedQueue<T> delayedQueue = redissonClient.getDelayedQueue(blockingFairQueue);
//        delayedQueue.offer(t, delay, timeUnit);
//        delayedQueue.destroy();
//    }

    /**
     * 获取元素并删除
     *
     * @param queueName           队列名称
     * @param delayedTaskListener 延时任务监听器
     * @param <T>                 泛型
     */
/*    public <T> void take(String queueName, DelayedTaskListener delayedTaskListener) {
        RBlockingQueue<T> blockingFairQueue = redissonClient.getBlockingQueue(queueName);
        while (true) {
            try {
                delayedTaskListener.invoke(blockingFairQueue.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }*/
        //由于此线程需要常驻，可以新建线程，不用交给线程池管理
        /*((Runnable) () -> {
            while (true) {
                try {
                    Thread.sleep(1000);
                    T t = blockingFairQueue.take();
                    delayedTaskListener.invoke(t);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).run();
    }*/
//}
